/**
 * 
 */
package com.faxsun.core.service;

import com.faxsun.core.persist.entity.UserPO;
import com.faxsun.core.pojos.enums.AccountType;

import mblog.core.pojos.User;
import mtons.modules.pojos.Page;
import mtons.modules.pojos.UserProfile;

/**
 * @author langhsu
 *
 */
public interface UserService {
	/**
	 * 登录
	 * @param username
	 * @param password
	 * @return
	 */
	UserProfile login(String username, String password);
	
	/**
	 * 注册
	 * @param user
	 */
	void register(User user);
	
	/**
	 * 修改用户信息
	 * @param user
	 * @return
	 */
	UserProfile update(User user);
	
	/**
	 * 查询单个用户
	 * @param id
	 * @return
	 */
	User get(long id);
	
	/**
	 * 修改头像
	 * @param id
	 * @param path
	 * @return
	 */
	UserProfile updateAvatar(long id, String path);
    
    /**
     * 修改昵称
     * @param id
     * @param name
     * @return
     */
    UserProfile updateName(long id, String name);
    
    /**
     * 修改签名
     * @param id
     * @param signature
     * @return
     */
    UserProfile updateSignature(long id, String signature);
	
	/**
	 * 修改密码
	 * @param id
	 * @param newPassword
	 */
	void updatePassword(long id, String newPassword);
	
	/**
	 * 修改密码
	 * @param id
	 * @param oldPassword
	 * @param newPassword
	 */
	void updatePassword(long id, String oldPassword, String newPassword);
	
	/**
	 * 修改用户状态
	 * @param id
	 * @param status
	 */
	void updateStatus(long id, int status);
	
	/**
	 * 分页查询
	 * @param page
	 */
	void paging(Page page);    
    
    /**
     * return an UserPO by given uid
     * @param uid an UserPO id
     * @return an UserPO by given uid
     */
    UserPO findUserPOBy(long uid);
    
    /**
     * 根据电商用户Id查询资讯用户Id
     * @param customerId
     * @return
     */
    UserPO findUserByCustomerId(long customerId);
    
    /**
     * 根据第三方用户id读取用户信息
     * @param openId
     * @return
     */
    public UserProfile findByThirdId(String openId,AccountType accountType);
    
    /**
     * 创建本地用户，此类用户未在电商和资讯注册，仅资讯可见
     * TODO: 待绑定第三方账户上线后，需修改此类逻辑，检查是否为绑定用户，或直接创建用户并绑定第三方帐号
     * @param user
     * @return
     */
    public UserProfile createLocalUser(UserPO user);
}
